import { promises as fs, mkdirSync, existsSync } from 'fs';
import { dirname, resolve } from 'path';

/**
 * 异步写入文件
 * @param filePath - 文件的路径
 * @param content - 要写入的内容，可以是字符串、Buffer 等
 * @returns {Promise<void>} - 一个 Promise，当写入成功时解析，失败时拒绝
 */
export async function writeFileAsync(
  filePath: string,
  content: string | Buffer,
): Promise<boolean> {
  console.log(`写入文件 ${filePath}`);
  try {
    // 解析相对路径为绝对路径
    const absolutePath = resolve(filePath);
    // 获取文件所在目录
    const dir = dirname(absolutePath);

    // 检查目录是否存在，不存在则创建
    if (!existsSync(dir)) {
      mkdirSync(dir, { recursive: true });
    }

    // 写入文件
    await fs.appendFile(absolutePath, content);
    return true;
  } catch (error) {
    console.error(`写入文件 ${filePath} 时出错:`, error);
    return false;
  }
}

/**
 * 异步读取文件并解析为 JSON
 * @param filePath - 文件的路径
 * @returns {Promise<any>} - 一个 Promise，当读取并解析成功时返回解析后的 JSON 对象，失败时拒绝
 */
export async function readFileAsJsonAsync(filePath: string): Promise<any> {
  try {
    // 解析相对路径为绝对路径
    const absolutePath = resolve(filePath);
    const data = await fs.readFile(absolutePath, 'utf8');
    return JSON.parse(data);
  } catch (error) {
    console.error(`读取并解析文件 ${filePath} 为 JSON 时出错:`, error);
    throw error;
  }
}
